/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gandalf.controller;

import gandalf.PersistenceManager;
import gandalf.controller.exceptions.NonexistentEntityException;
import gandalf.model.Cart;
import gandalf.model.Postavka;
import gandalf.model.Rezervacija;
import gandalf.model.Stranka;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
/**
 *
 * @author tincek
 */
public class RezervacijaJpaController {

    public EntityManager getEntityManager() {
        return PersistenceManager.createEntityManager();
    }

    public Long create(Rezervacija rezervacija) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();

            em.persist(rezervacija);
            em.getTransaction().commit();

            return rezervacija.getId();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }
    public Rezervacija findRezervacija(Long id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Rezervacija.class, id);
        } finally {
            em.close();
        }
    }

    public void edit(Rezervacija rezervacija) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            rezervacija = em.merge(rezervacija);
            em.getTransaction().commit();

        } finally {
            if (em != null) {
                em.close();
            }
        }
    }
    public void destroy(Long id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Rezervacija r;
            try {
                r = em.getReference(Rezervacija.class, id);
                r.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("Rezervacija with id " + id + " no longer exists.", enfe);
            }
            em.remove(r);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroyRezervacije(List<Rezervacija> rezervacije) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Rezervacija rez;

            if(!rezervacije.isEmpty() && rezervacije!=null){
            for(Rezervacija r : rezervacije ){
                rez = em.getReference(Rezervacija.class, r.getId());
                for(Postavka p : r.getPostavka()){
                    //p.setVstopnica(null);
                }
                em.remove(rez);
            }}

           
           // em.remove(r);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Rezervacija> findRezervacijaWithStranka(Long id) {
        EntityManager em = getEntityManager();

        List<Rezervacija> rezervacije = new ArrayList<Rezervacija>();
        Stranka s = em.getReference(Stranka.class, id);

        Query q = em.createQuery("select r from Rezervacija r WHERE r.stranka = ?1");
        q.setParameter(1, s);

        Iterator vstopniceIterator = q.getResultList().iterator();
        while (vstopniceIterator.hasNext()) {
            rezervacije.add((Rezervacija) vstopniceIterator.next());
        }


        return rezervacije;
    }
    public boolean preveriRezervacije(Long idStranke, Long idDogodka) {
        boolean naselRezervacijo= false;
        for(Rezervacija r : findRezervacijaWithStranka(idStranke)) {

            for(Postavka p : r.getPostavka()){
                if(p.getVstopnica().getDogodek().getId().equals(idDogodka))
                    naselRezervacijo=true;
            }
        }
        return naselRezervacijo;
    }

}
